﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;

namespace SiGeCoPre.Presupuesto_Util
{
    /// <summary>
    /// Clase para manejar archivos de texto
    /// </summary>
    class Texto
    {
        static StreamWriter writer;
        static StreamReader reader;
        static String directorio = Application.StartupPath + @"\Información Precargada\";
        static List<String> listado = new List<string>();

        /// <summary>
        /// Escribe el archivo de log
        /// </summary>
        /// <param name="texto">Texto a escribir en el archivo</param>
        public static void escribirLog(String texto)
        {
            DateTime fecha = DateTime.Now;
            String sfecha = "";
            String archivo = Application.StartupPath + @"\Registros\log.txt";
            sfecha = fecha.ToString();
            try
            {
                Herramientas.comprobarDirectorio(Application.StartupPath + @"\Registros");
                writer = File.AppendText(archivo);
                writer.WriteLine(sfecha + "-" + texto);
                writer.Close();
            }

            catch
            {
                writer.Close();
            }
            finally
            {
                writer.Close();
            }
        }

        /// <summary>
        /// Carga el texto del archivo en una lista
        /// </summary>
        /// <param name="archivo">Determina el archivo a leer</param>
        /// <returns>Devuelve una lista el texto del archivo</returns>
        private static List<String> leerArchivo(String archivo)
        {
            String line;
            try
            {
                reader = new StreamReader(directorio + archivo);
                line = reader.ReadLine();
                while (line != null)
                {
                    listado.Add(line);
                    line = reader.ReadLine();
                }


                reader.Close();
            }


            catch (Exception ex)
            {
                MessageBox.Show("No se pudo leer el archivo", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                reader.Close();
                listado = null;
                escribirLog(ex.Message);
            }

            return listado;
        }

        /// <summary>
        /// Lee una linea específica del archivo
        /// </summary>
        /// <param name="linea">Determina la linea a leer</param>
        /// <param name="archivo">Determina el archivo a leer</param>
        /// <returns>Devuelve la cadena leida</returns>
        public static String leerLinea(String linea, String archivo)
        {
            String texto = "";
            List<string> archivoPrecargado = new List<string>();
            try
            {
                archivoPrecargado = leerArchivo(archivo);
                
                if (null != archivoPrecargado)
                {
                    for (int i = 0; i < archivoPrecargado.Count; i++)
                    {
                        if (linea.Equals(archivoPrecargado[i]))
                        {
                            texto = archivoPrecargado[i + 1];
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("No se pudo leer el archivo", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                texto = "";
                escribirLog(ex.Message);
            }

            return texto;
        }
    }
}
